package array.RangeSum;

/**题目:
 * 题目描述
    给定一个整数数组 Array，请计算该数组在每个指定区间内元素的总和。
 * 输入描述
    第一行输入为整数数组 Array 的长度 n，接下来 n 行，每行一个整数，表示数组的元素。随后的输入为需要计算总和的区间，直至文件结束。
 * 输出描述
    输出每个指定区间内元素的总和。
 */

import java.util.Scanner;

/**知识点:
 * 前缀和的思想是重复利用计算过的子数组之和，从而降低区间查询需要累加计算的次数。
 * 前缀和 在涉及计算区间和的问题时非常有用！
 * 前缀和的思想是重复利用计算过的子数组之和，从而降低区间查询需要累加计算的次数。
 * 前缀和 在涉及计算区间和的问题时非常有用！
 */
public class rangeSum {
   public static void main(String[] args){
       Scanner sc = new Scanner(System.in);

       System.out.println("请输入数组长度:");
       int n =sc.nextInt();
       int[] arr = new int[n];//用户要输入的数组
       int[] p= new int[n];//前缀和的数组

       System.out.println("请输入数组元素:");
       int presum=0;
       for(int i=0;i<n;i++){
           arr[i] = sc.nextInt();
           presum += arr[i];
           p[i] = presum;
       }

       while(sc.hasNextInt()){//循环输入区间
           int a = sc.nextInt();//区间开始位置
           int b = sc.nextInt();//区间结束位置

           int sum;
           if(a==0){
               sum = p[b];
           }else{
               sum = p[b]-p[a-1];
           }
           System.out.println(sum);
       }
       sc.close();//关闭scanner
   }
}


